package edu.ccut.saturn.component.impl.directory;

import java.net.URL;

import org.osgi.framework.Bundle;

import edu.ccut.saturn.component.ComponentFactory;
import edu.ccut.saturn.component.IBundleAuthorityInfo;
import edu.ccut.saturn.component.IBundleInfo;
import edu.ccut.saturn.component.SaturnComponentException;

/**
 * 权限配置文件资源的实现类，权限配置文件位于bundle的根路径下，描述了bundle中的资源及角色信息。
 * <code>AuthorityConfigFileResourceInfo</code>扩展了类<code>AbstractFileResourceInfo</code>。
 * 
 * @author 温建
 * @version 1.0 2008.8.27
 * 
 * @see AbstractFileResourceInfo
 * @see IBundleInfo
 * @see ComponentFactory
 * @see IBundleAuthorityInfo
 * 
 */
public class AuthorityConfigFileResourceInfo extends AbstractFileResourceInfo {

	public AuthorityConfigFileResourceInfo() {
		super(SATURN_CONFIG_NAME_AUTHORITY);
	}

	/**
	 * 权限资源的加载逻辑。首先根据文件资源的路径获得文件的URL对象；然后通过类<code>ComponentFactory</code>
	 * 加载权限配置文件，最后保存到bundle对应的<code>IBundleInfo</code>的<code>IBundleAuthorityInfo</code>中。
	 * 
	 * @param bundle
	 *            加载的bundle对象实例
	 * @param bundleInfo
	 *            保存bundle的加载信息
	 * 
	 */
	@Override
	public void load(Bundle bundle, IBundleInfo bundleInfo) {
		URL url = bundle.getEntry(this.getFilePath());

		try {
			bundleInfo.getBundleAuthorityInfo().initAuthorityInfo(
					ComponentFactory.getAuthorityInfo(bundle, url));

		} catch (SaturnComponentException e) {
			logger.error("load authority config file failed! the file name is \""
					+ this.getFilePath() + "\" in bundle ["
					+ bundle.getSymbolicName() + "]", e);
		}
	}
}
